package cn.zhouchao.feign;

import cn.zhouchao.User;
import cn.zhouchao.fallback.UserServiceFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * name:服务名称
 * path:接口的前缀路径
 *
 * 启动时，我们的@EnableFeignClients会去扫描同级包下所有类看是否加了@FeignClient，如果加了那么就会使用动态代理给当前feign接口生成实现类，
 * 那么在实现类的方法中其实就是使用resttemlate+ribbon实现的接口调用
 * 那么其实我们在使用feign接口的时候调用feign接口的实现类
 */
@FeignClient(name = "user-service", path = "user", contextId = "UserService", fallbackFactory = UserServiceFallbackFactory.class)
public interface UserService {
    @GetMapping("/{id}")
    User getUser(@PathVariable("id") Long id);
    // 如果在接口里还有其他方法的话，那么就需要在工厂方法里加上重写其他方法的托底数据
}
